package com.proyectos.bean;


import com.proyectos.ejb.ProEjbLocal;
import com.proyectos.model.Propuestas;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.context.RequestContext;

/**
 *
 * @author Jose
 */
public class CtrPropuestas implements Serializable {

    @EJB
    private ProEjbLocal ejb;
    
    private static final String vacio="";
    private String name;
    private List<Propuestas> lista;
    private Propuestas activeReg;
    private CtrEntorno oentorno;
    private String nombre;      //para crear la propuesta el alumno
    private String descripcion; //para crear la propuesta el alumno
    private String referencia; //para pasarla a proyecto

    public CtrEntorno getOentorno() {
        return oentorno;
    }

    public void setOentorno(CtrEntorno oentorno) {
        this.oentorno = oentorno;
    }

    public String getReferencia() {
        return referencia;
    }

    public void setReferencia(String referencia) {
        this.referencia = referencia;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Propuestas getActiveReg() {
        return activeReg;
    }

    public void setActiveReg(Propuestas activeReg) {
        this.activeReg = activeReg;
    }



    //coordinador
    public void edit(BigDecimal id) {
        try {
           
            this.activeReg = this.ejb.get(id);
           
            Map<String, Object> options = new HashMap<String, Object>();
            options.put("modal", true);
            options.put("draggable", true);
            options.put("resizable", false);
            options.put("contentHeight", 350);
            options.put("contentWidth", 600);
            RequestContext.getCurrentInstance().openDialog("mantPropuestas", options, null);
        } catch (Exception ex) {
            Logger.getLogger(CtrPropuestas.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    //guarda la aprobación por parte del coordinador y matricula pidiendo la referencia llama a saveref
    public void save(ActionEvent event) {
        try {
           // this.activeReg.setLvisto(BigDecimal.ONE);//0=no visto, 1=aceptado,2=no aceptado
            this.ejb.save(activeReg);
            this.buscar();
            
            Map<String, Object> options = new HashMap<String, Object>();
            options.put("modal", true);
            options.put("draggable", false);
            options.put("resizable", false);
            options.put("contentHeight", 200);
            options.put("contentWidth", 300);
            RequestContext.getCurrentInstance().openDialog("pedRef", options, null);
           
        } catch (Exception ex) {
            //this.addMessage(ex.getMessage());
            Logger.getLogger(CtrAlumnos.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
    //crea el proyecto y matricula
     public void saveRef(ActionEvent event) {
         try {
            ejb.matriculaPropuesta(this.activeReg.getNalumno(),this.activeReg.getCnombre(),this.activeReg.getCdescripcion(),this.activeReg.getNcarrera(),referencia,this.activeReg);
            this.buscar();
            MensajeGrabado("El proyecto a sido creado y el alumnno matriculado");
           // RequestContext.getCurrentInstance().closeDialog(null);
        } catch (Exception ex) {
            this.addMessage(ex.getMessage());
            //Logger.getLogger(CtrAlumnos.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public List<Propuestas> getLista() {
        return lista;
    }

    public void setLista(List<Propuestas> lista) {
        this.lista = lista;
    }

    public void addMessage(String summary) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR: ", summary);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
    public void MensajeGrabado(String summary) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, "");
        FacesContext.getCurrentInstance().addMessage(null, message);
    }       
    public void buscar() {
         
            TreeMap vparametros = new TreeMap();
            vparametros.put("ncarrera", this.oentorno.getCarrera());
            if (name != null && !name.isEmpty()) {

                vparametros.put("cnombre", "%" + name.toUpperCase() + "%");
            } else {
                vparametros.put("cnombre", "%");
            }
            lista = this.ejb.query("Propuestas.findByPendientes", vparametros);
      

    }

     public void buscar_historico(int x) {
         
            TreeMap vparametros = new TreeMap();
            vparametros.put("ncarrera", this.oentorno.getCarrera());
            vparametros.put("lvisto", x);
            if (name != null && !name.isEmpty()) {

                vparametros.put("cnombre", "%" + name.toUpperCase() + "%");
            } else {
                vparametros.put("cnombre", "%");
            }
            lista = this.ejb.query("Propuestas.findByHistorico", vparametros);
      

    }
    
    
    public void buscar_todo() {

        this.buscar();

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
//deniega la propuesta
    public void denegar(ActionEvent event) {
        try {

            this.ejb.denegarPropuesta(activeReg);
            
        } catch (Exception ex) {

            Logger.getLogger(CtrPropuestas.class.getName()).log(Level.SEVERE, null, ex);
        }
        RequestContext.getCurrentInstance().closeDialog(null);
        this.buscar();
    }

    public void resetear(ActionEvent event) {
        try {

            this.ejb.resetearPropuesta(activeReg);
            
        } catch (Exception ex) {

            Logger.getLogger(CtrPropuestas.class.getName()).log(Level.SEVERE, null, ex);
        }
        RequestContext.getCurrentInstance().closeDialog(null);
        this.buscar();
    }
    public CtrPropuestas() {

    }


    
    //graba la propuesta del alumno
public void saveProp(ActionEvent event) {
        try {
            
            ejb.grabarPropuesta(oentorno.alumno,nombre,descripcion);
            MensajeGrabado("La propuesta ha sido grabada");
           // RequestContext.getCurrentInstance().closeDialog(null);
        } catch (Exception ex) {
            this.addMessage(ex.getMessage());
            //Logger.getLogger(CtrAlumnos.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
public boolean ispendiente(){
    
    if(this.activeReg.getLvisto().compareTo(BigDecimal.ZERO)==0)
    {
        
        return true;
    }
    else{
         
        return false;
    }
    
  }

//poner a 0 lvista
    public void delete (ActionEvent event) {
       
        try {
            if (activeReg.getLvisto().equals(BigDecimal.valueOf(2))){
                 MensajeGrabado("La propuesta ha sido borrada");
                 this.ejb.delete(activeReg.getNcodigo());
             }
                 
             else{
                 
                 addMessage("No se puede borrar una propuesta pendiente o aprobada");
             }
              this.buscar();   
        } catch (Exception ex) {

            Logger.getLogger(CtrPropuestas.class.getName()).log(Level.SEVERE, null, ex);
        }
       // RequestContext.getCurrentInstance().closeDialog(null);
       
    }
}
